package cn.tedu._052mvcboot02.controller;

import cn.tedu._052mvcboot02.mapper.UserMapper;
import cn.tedu._052mvcboot02.pojo.dto.UserAddDTO;
import cn.tedu._052mvcboot02.pojo.dto.UserUpdateDTO;
import cn.tedu._052mvcboot02.pojo.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @RestController注解：允许当前所有控制器方法以返回值的形式返回数据给客户端
 * */
@RestController
@RequestMapping("/v1/users/")
public class UserController {
    /*
    required=false: 装配不成功,也不报错! 慎用!!!!!!
    request=true(默认):装配不成功,抛出异常!
     */
    @Autowired(required = false)
    private UserMapper userMapper;

    /**添加用户
     * RequestMapping的method参数：限定请求方法
     * 等价于：@PostMapping注解
     */
    //@RequestMapping(value = "insert", method = RequestMethod.POST)
    @PostMapping("insert")
    //@ResponseBody
    public String addUser(UserAddDTO userAddDTO){
        // 1.获取数据
        User user = new User();
        // 复制属性
        BeanUtils.copyProperties(userAddDTO, user);
        user.setCreated(new Date());
        // 2.数据表中插入数据
        int i = userMapper.insertUser(user);
        if (i > 0){
            return "添加成功";
        }

        return "添加失败";
    }

    /**查询用户列表*/
    //@RequestMapping(value = "userList", method = RequestMethod.GET)
    @GetMapping("userList")
    //@ResponseBody
    public List<User> userList(){
        // 1.查询数据表中所有的用户数据

        return userMapper.selectUserList();
    }

    /**删除指定用户*/
    //@RequestMapping(value = "delete", method = RequestMethod.GET)
    @GetMapping("delete")
    //@ResponseBody
    public String deleteUser(int id){
        System.out.println("id = " + id);
        // 1.数据表中删除对应的数据
        userMapper.deleteUserById(id);

        return "删除成功";
    }

    /**更新指定用户*/
    //@RequestMapping(value = "update", method = RequestMethod.POST)
    @PostMapping("update")
    //@ResponseBody
    public String updateUser(UserUpdateDTO userUpdateDTO){
        System.out.println("userUpdateDTO = " + userUpdateDTO);
        // 1.创建User对象
        User user = new User();
        // 2.复制属性
        BeanUtils.copyProperties(userUpdateDTO, user);
        // 3.调用接口方法
        userMapper.updateUser(user);

        return "修改成功";
    }

    /**
     * 1.@PathVariable注解：根据id查询用户信息
     * 2.注意,在GetMapping注解中获取变量值需要加花括号,比如：{id}
     * 3.如果请求地址中有多个变量,则在每个参数前都添加 PathVariable 注解即可
     * 4.测试地址：http://localhost:8080/v1/users/100
     * */
    @GetMapping("{id}")
    public User selectById(@PathVariable int id){
        // 调用mapper接口方法
        return userMapper.selectById(id);
    }
}








